package com.masita.ventanas;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;

import com.masita.logica.Ficha;
import com.masita.logica.Venta;
import com.masita.util.Utilidad;


public class PanelVentasPendientes extends JPanel implements InterfaceTabla{
	
	private VentanaPrincipal padre = null;
	
	private Vector ventas;
	
	// PANEL SUPERIOR *************************************
	private JPanel panelTop = new JPanel();
	
	private JButton bPagarCuota = new JButton("Registrar Cuota");
	private JButton bNuevaVenta = new JButton("Registrar Venta");
	
	// PANEL TABLE ****************************************
	private JScrollPane scrollTabla = new JScrollPane();
	private TablaDatos tabla = new TablaDatos();

	public PanelVentasPendientes(VentanaPrincipal p){
		super();
		this.padre = p;
		init();
	}
	
	private void init(){
		this.setLayout(new BorderLayout());
		this.cargarPanelTop();
		this.cargarPanelTabla();
		
		JPanel p = new JPanel();
		this.add(p,BorderLayout.EAST);
		p.setPreferredSize(new Dimension(50,20));

		p = new JPanel();
		this.add(p,BorderLayout.WEST);
		p.setPreferredSize(new Dimension(50,20));

		p = new JPanel();
		this.add(p,BorderLayout.SOUTH);
		p.setPreferredSize(new Dimension(50,50));
		
		// SETEOS DE LA TABLA *****************************
		tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabla.getSelectionModel().
				addListSelectionListener(new javax.swing.event.ListSelectionListener(){
			public void valueChanged(javax.swing.event.ListSelectionEvent e){
				habilitarBotones(tabla.getFilaSeleccionada());
			}
		});
		
		tabla.addKeyListener(new KeyListener(){

			public void keyPressed(KeyEvent e) {
				if( e.getKeyCode() == KeyEvent.VK_ENTER )
					bPagarCuota.doClick();
			}

			public void keyReleased(KeyEvent arg0) {}
			public void keyTyped(KeyEvent arg0) {}
			
		});
	}
	
	public void cargarPanelTop(){
		this.add(panelTop,BorderLayout.NORTH);
		panelTop.setPreferredSize(new Dimension(530,40));

		panelTop.add(bNuevaVenta);
		bNuevaVenta.setPreferredSize(new Dimension(120,20));
		bNuevaVenta.setMargin(new Insets(0,0,0,0));
		bNuevaVenta.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				padre.VCargarFicha();
			}
		});
		this.bPagarCuota.setEnabled(false);
		
		JPanel separador = new JPanel();
		this.panelTop.add(separador);
		separador.setPreferredSize(new Dimension(50,20));
		
		panelTop.add(bPagarCuota);
		bPagarCuota.setPreferredSize(new Dimension(120,20));
		bPagarCuota.setMargin(new Insets(0,0,0,0));
		bPagarCuota.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				cargarFicha(tabla.getFilaSeleccionada());
			}
		});
		this.bPagarCuota.setEnabled(false);
	}
	
	public void cargarPanelTabla(){
		this.add(scrollTabla,BorderLayout.CENTER);
		scrollTabla.getViewport().add(tabla);
		tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		Vector col = new Vector();
		col.addElement(new String("FECHA VENTA"));
		col.addElement(new String("CLIENTE"));
		col.addElement(new String("DNI"));
		col.addElement(new String("PRODUCTO"));
		col.addElement(new String("TALLE"));
		col.addElement(new String("INTERES"));
		col.addElement(new String("TOTAL VENTA"));
		col.addElement(new String("SALDO"));
		col.addElement(new String("FORMA DE PAGO"));
		
		this.tabla.cargarColumnas(col);
		this.cargarVentasPendientes();
		int[] w = {80,200,80,300,60,80,100,80,100};
		this.tabla.setWitdhColumna(w,true);
	}
	
	private void cargarVentasPendientes(){
		ventas = Venta.getVentasPendientes();		
		Vector filas = new Vector();
		if( ventas != null ){
			for(int i=0; i<ventas.size(); i++){
				Vector fila = new Vector();
				Venta v = (Venta)ventas.elementAt(i);
			
				fila.addElement(Utilidad.getFechaFormato(v.getFechaVenta()));
				fila.addElement(Ficha.getFicha(v.getIdFicha()).getCliente().getNombre());
				fila.addElement(Ficha.getFicha(v.getIdFicha()).getCliente().getDni());
				fila.addElement(v.getProducto().getTexto());
				fila.addElement(v.getProducto().getTalle(v.getIdTalle()).getTalle());
				fila.addElement(String.valueOf(v.getInteres()));
				fila.addElement(String.valueOf(v.getTotalConInteres()));
				fila.addElement(String.valueOf(v.getSaldo()));
				fila.addElement(v.getFormaPago());
			
				filas.addElement(fila);
			}			
		}
		
		this.tabla.cargarDatos(filas);	
	}
	
	// TODO LLAMA A LA VENTANA VENTAS PARA HACER MODIFICACIONES
	private void modificarVenta(int i){
		
		if( i < this.ventas.size() && i > -1){
			//this.padre.VVentas((Venta)this.ventas.elementAt(i));
		}
	}
	
	// HABILITAR LOS BOTONES
	private void habilitarBotones(int i){
		if( i > -1 && i < this.ventas.size() )
			bPagarCuota.setEnabled(true);
		else
			bPagarCuota.setEnabled(false);
	}
	
	public void cargarFicha(int i){
		if( i < this.ventas.size() && i > -1){
			Ficha f = Ficha.getFicha(((Venta)this.ventas.elementAt(i)).getIdFicha());
			if( f != null ){
				// ABRE LA VENTANA FICHAS PARA EL CASO DEL PAGO DE UNA CUOTA
				padre.VFichas(f,VentanaFichas.PAGAR_CUOTA,
						((Venta)this.ventas.elementAt(i)).getIdVenta());
			}
		}
	}
	/******************************************************
	 * TODO - VERIFICA SI SE MODIFICARON LOS ESTADOS DE LAS VENTAS
	 * LA VARIABLE ACTUALIZAR_VENTAS SE SETEA A TRUE CUANDO REGISTRO
	 * UNA VENTA EN LA VENTANA FICHAS, Y EL PANELVENTASPENDIENTES
	 * CHEQUEA LA VARIABLE CUANDO OBTIENE EL FOCO *********
	 *****************************************************/ 
	public void actualizarTabla(){
		this.cargarVentasPendientes();
	}
	
	public TablaDatos getTabla(){
		return this.tabla;
	}
	
	public Venta getVentaSeleccionada(){
		if( this.tabla.getFilaSeleccionada() != -1 )
			return (Venta)ventas.elementAt(this.tabla.getFilaSeleccionada());
		return null;
	}
	
}
